package com.briup.day11;

/**
 * 外部类： 表示所有的内部类都定义在外部类中
 * @author lining
 * @date 2024/1/22 14:29
 */
public class OuterClass {
    private int id = 1;
    private static String city;
    public void out(){
        //创建内部类对象后可以访问它的属性和方法
        MemberInnerClass mic = new MemberInnerClass();
        mic.method();
        System.out.println(mic.name);
        System.out.println(mic.id);
        //访问静态内部类静态的信息
        StaticInnerClass.sing();
        System.out.println(StaticInnerClass.address);
        //访问静态内部类非静态信息
        StaticInnerClass sic = new StaticInnerClass();
        sic.say();
        System.out.println(sic.num);

    }
    //定义成员内部类
    public class MemberInnerClass{
        public String name;
        public int id = 2;
//        public static int age; 不能定义静态的属性和方法
        public void inner(){
            //内部类可以直接访问外部类的属性和方法
            System.out.println(id);
            System.out.println(city);
            out();
        }
        public void method(){
            //内部类成员变量和外部类成员变量名字相同。调用区分
            System.out.println("内部类："+this.id);//内部类id
            System.out.println("外部类："+OuterClass.this.id);//外部类的id
        }
    }

    //静态内部类可以定义静态的属性和方法
    public static class StaticInnerClass{
        public int num;
        public static String address;
        public void say(){
            //只能访问外部类中的静态属性
//            System.out.println(id);
            System.out.println(city);
//            out();
        }
        public static void sing(){

        }

    }

}
